﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Globalization;

namespace Clinica_Frba
{
    public partial class RegAten : Form
    {
        Conexion sql = Conexion.getInstance();
        Utility util = Utility.getInstance();
        DateTime fechaActual;
        int idMed;

        public RegAten()
        {
            InitializeComponent();
        }

        private void RegAten_Load(object sender, EventArgs e)
        {
            fechaActual = DateTime.ParseExact(util.getAppDate() + " " + util.getAppHora(), "yyyyMMdd HH:mm:ss", CultureInfo.InvariantCulture);
            diaAtencion.Value = fechaActual;

            if (util.getIdRol() == 3)
            {
                loadProfesional();
            }
            else
            {
                MessageBox.Show("Seleccione un Profesional");
                ListaProfesionales busquedaMed = new ListaProfesionales();
                try
                {
                    idMed = busquedaMed.searchMedico();
                    if (idMed > 0)
                    {
                        loadProfesional(idMed);
                    }
                    else
                    {
                        MessageBox.Show("Seleccione un profesional");
                        this.Close();
                    }
                }
                catch
                {
                    MessageBox.Show("Tiene que seleccionar un profesional");
                    this.Show();
                }
            }


        }

        void loadProfesional()
        {
            string strQuery =   "SELECT Me.id_medico, Me.Medico_Apellido + ', ' + Me.Medico_Nombre as 'Nombre' FROM b_sharp.Medicos AS Me " +
	                            "WHERE Me.id_usuario = " + util.getUserName() + " " +
	                            "AND bajaLogica <> 'S';";
            SqlDataReader reader = sql.execQuery(strQuery);

            if (reader.Read())
            {
                idMed = Convert.ToInt32(reader.GetValue(0));
                labelDoctor.Text += " " + reader.GetString(1);
                BuscarConsulta busCon = new BuscarConsulta();
                busCon.buscarConsultas(idMed, this);
            }
            reader.Close();
        }

        void loadProfesional(int idMed)
        {
            string strQuery = "SELECT Me.id_medico, Me.Medico_Apellido + ', ' + Me.Medico_Nombre as 'Nombre' FROM b_sharp.Medicos AS Me " +
                                "WHERE Me.id_medico = " + idMed + " " +
                                "AND bajaLogica <> 'S';";
            SqlDataReader reader = sql.execQuery(strQuery);

            if (reader.Read())
            {
                labelDoctor.Text += " " + reader.GetString(1);
                BuscarConsulta busCon = new BuscarConsulta();
                busCon.buscarConsultas(idMed, this);
            }
            reader.Close();
        }



        public void loadConsultas(int numCons, int id_Pac_par)
        {
            string qSelect, qFrom, qWhere, query;
            try
            {
                qSelect = "SELECT Co.Consulta_Numero, Co.Id_Paciente, Pa.Paciente_Nombre + ' ' + Pa.Paciente_Apellido as 'Paciente' , Co.Consulta_FechaLlegada as 'Fecha de Llegada' ";
                qFrom = "FROM b_sharp.Consultas AS Co " +
                        "JOIN b_sharp.Pacientes AS Pa on Pa.Id_Paciente = Co.Id_Paciente ";
                qWhere = "WHERE Co.Id_Medico = " + idMed + " " +
                            "AND Co.BonoConsulta_Numero is not null " +
                            "AND Co.Consulta_Numero = " + numCons + " " +
                            "AND Co.Id_Paciente = " + id_Pac_par + " ";

                query = qSelect + qFrom + qWhere + ";";
                SqlDataReader reader = sql.execQuery(query);

                if (reader.Read())
                {
                    numCon.Text = Convert.ToString(reader.GetValue(0));
                    idPac.Text = Convert.ToString(reader.GetValue(1));
                    NyAPac.Text = Convert.ToString(reader.GetValue(2));
                    diaHoraLlegada.Value = reader.GetDateTime(3);
                }
                reader.Close();
                buttonTermCons.Enabled = true;

            }
            catch (SqlException)
            {
                labelErrorConsultas.Text = "*Error en las consultas";
                labelErrorConsultas.Visible = true;
            }

        }

        private void resultados_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (resultados.SelectedItem.ToString() == "Síntomas")
            {
                sintTextBox.Visible = true;
                diagTextBox.Visible = false;
            }
            else
            {
                sintTextBox.Visible = false;
                diagTextBox.Visible = true;
            }
             
        }

        private void buttonTermCons_Click(object sender, EventArgs e)
        {
            try
            {
                string strUpdateConsulta =
                    	"UPDATE b_sharp.Consultas " +
	                    "SET Consulta_Sintomas = @sint, Consulta_Enfermedades = @diagn, Consulta_FechaAtencion = @fec " +
	                    "WHERE Consulta_Numero = @conNum;";
                SqlCommand updateConsulta = new SqlCommand(strUpdateConsulta, sql.openCon());
                updateConsulta.Parameters.AddWithValue("@sint", sintTextBox.Text);
                updateConsulta.Parameters.AddWithValue("@diagn", diagTextBox.Text);
                updateConsulta.Parameters.AddWithValue("@conNum", numCon.Text);
                updateConsulta.Parameters.AddWithValue("@fec", diaAtencion.Value);
                updateConsulta.ExecuteNonQuery();

                labelErrorUpdate.Visible = false;
                MessageBox.Show("Consulta actualizada correctamente");

            }
            catch (SqlException)
            {
                labelErrorUpdate.Text = "Error con las consultas, intente nuevamente";
                labelErrorUpdate.Visible = true;
            }
            Decision newDecision = new Decision();
            newDecision.Text = "¿Necesita una receta?";
            newDecision.label1.Text = "¿Desea generar una receta para esta consulta?";
            newDecision.ShowDialog();
            if (newDecision.confirmar)
            {
                Receta nuevaRec = new Receta();
                nuevaRec.asignarReceta(Convert.ToInt32(numCon.Text), Convert.ToInt32(idPac.Text), idMed);
                this.Close();
            }
            else
            {
                this.Close();
            }
        }

    }
}
